package componentes;

import java.util.ArrayList;

import control.MapaControl;

public class Mapa {
	
	
	private ArrayList<Aldea> listaAldeas = new ArrayList<Aldea>();
	private int[][] distancias;
	private Aldea aldea_inicial;
	private Aldea  aldea_final;
	
	public Mapa() {
		
	}
	


	public Aldea getInicial() {
		return aldea_inicial;
	}
	
	public Aldea getFinal() {
		return aldea_final;
	}
	/**
	 * Lee desde la clase de control el ambiente inicial y lo carga.
	 */
	public void inicializar_mapa_con_tesoros() {
		
		MapaControl cMapa = new MapaControl(); 
		this.listaAldeas = cMapa.cargar_aldeas_con_tesoros();
		this.distancias = cMapa.cargar_distancias();
		this.aldea_final = getAldeaFinal();
		this.aldea_inicial = getAldeaInicial();
		
	}
	public void inicializar_mapa() {
		
		MapaControl cMapa = new MapaControl(); 
		this.listaAldeas = cMapa.cargar_aldeas();
		this.distancias = cMapa.cargar_distancias();
		this.aldea_final = getAldeaFinal();
		this.aldea_inicial = getAldeaInicial();
		
	}	
	
	/**
	 * desde la lista de aldeas retorna una instancia de aldea inicial
	 * @return
	 */
	
	private Aldea getAldeaInicial() {
		boolean esInicial = false;
		int i=0;
		while(i<listaAldeas.size() && esInicial==false)
		{
			if(listaAldeas.get(i).isAldeaInicial)
				esInicial = true;
			else
				i++;
		}
		return listaAldeas.get(i);
		
	}

	/**
	 * desde la lista de aldeas retorna una instancia de aldea final
	 * @return
	 */

	private Aldea getAldeaFinal() {
		boolean esFinal = false;
		int i=0;
		while(i<listaAldeas.size() && esFinal==false){
			if(listaAldeas.get(i).isAldeaFinal){
				esFinal = true;
			}
			else
				 i++;
		}
		return listaAldeas.get(i);
		
	}



	public ArrayList<Aldea> getListaAldeas() {
		return listaAldeas;
	}
	
	public int[][] getDistancias() {
		return distancias;
	}


	public void copiarMapa(Mapa mapa) {
		this.aldea_final = mapa.getFinal();
		this.aldea_inicial = mapa.getInicial();
		this.distancias = mapa.getDistancias();
		this.listaAldeas = mapa.getListaAldeas();
	}

	


	public Aldea getAldea(String nombreAldea) {
	
		for(int i=0;i<this.listaAldeas.size() ;i++)
		{
			if(this.listaAldeas.get(i).getNombre().equals(nombreAldea))
			{
				return this.listaAldeas.get(i);
			}
				
		}
		
		return null;
	}


}

